iT邦幫忙

1

Git 快速入門

  • 分享至 

  • xImage
  •  

僅用於教學,文中有使用到外部網站的文章都有附上參考連結,若有疑問請來信告知 email:nickchen1998@gmail.com

一、如何建立 Git 專案

以下分別針對從頭建立專案以及建立一個已經有使用 Git 的專案這兩種情況進行說明

(一)、從頭建立專案

  • 情境:該專案並沒有使用過 Git 進行版本控制過,包含從 0 開始的專案或是已經有開發到一半的專案

  • demo 流程:

  • 實作:

    • 打開 terminal 利用 mkdir 指令建立目錄

    • 利用 dir 指令確認目錄有被建立成功 (linux base 請使用 ls)

    • 利用 cd 切換到該目錄

    • 於該目錄下運行 git init 指令

    • 打開該資料夾查看是否有 .git 目錄 (linux base 可使用 ls -al 查看)

(二)、建立一個已經有使用 Git 的專案

  • 情境:你需要加入別人開發到一半的專案,或是想從 GitHub or GitLab 上複製別人的專案下來使用或開發時

  • 語法:git clone <網址 or 檔案位置> <複製過去的目錄名稱 (預設為複製的專案 or 目錄名稱)>

  • demo 流程:

  • 實作:

    • 切換到 Desktopp 目錄並 clone 一份名為 demo 的專案

    • 將 clone 的專案命名為 demo_clone

    • 確認 .git 目錄是否存在

二、提交寫好的程式碼

  • 情境:當你今天有對專案進行開發,想要將這個紀錄提交到 git 進行版本控制時

  • demo 流程:

  • 實作:

    • 切換到一個有 git 的專案目錄下

    • 新增一個名為 demo.txt 的文字檔

    • 運行 git add . 將編輯後的東西加入 git 進行追蹤

    • 運行 git status 查看目前專案狀態,可以發現 git 已經有偵測到有一個新的檔案叫做 demo.txt 但是還沒有進行提交

    • 運行 git commit -m <這個版本的簡易描述> 進行版本提交

    • 運行 git log 查看是否提交成功,若有成功會於 log 內提示

三、回到某個版本

  • 情境:當你今天把你的程式碼改爛了,需要回到上一個版本,或是今天系統更新後出現問題,需要馬上切換到之前某個正常版本時

  • demo 流程:

  • 實作:

    • 先利用第二點說明的提交方式,再新增一個文字檔並提交

    • 運行 git log 查看想要回到哪個版本的版本號碼,這邊假設想回到註解為 "新增文字檔" 這個紀錄

    • 複製該版本號碼

    • 運行 git reset --hard <版本號碼>,進行回復

    • 運行 git log 檢查提交紀錄是否回到指定的地方

四、何謂分支 (Branch)

(一)、定義與簡介

一般來說,分支粗略分為五種,分別為 master、hotfix、release、develope 以及 feature,下面分別進行介紹

  • master:專案的主要分支,於其他種類的分支進行開發後,最終都會 merge 到此分支上,於正式環境上部屬的專案通常都會使用此分支,每個 git 專案預設都會有一個名為 master 的分支

  • hotfix:當今天位於 master 的專案突然出現了一個錯誤,需要緊急修正時,會建立一個分支來做緊急處理,此分支必須優先處理

  • release:專案開發中,每個版本都會建立一個分支,通常會部屬在正式環境用於測試將 develope 以及 feature 合併後確認專案是否有問題,若沒有問題則會在做完測試後,merge 到 master 分支上

  • develope:為針對 release 分支的專案需求切出來的大項目,例如:前端、後端

  • feature:針對 develope 每個細項功能所開出的分支,例如:後端功能當中的登入、登出,都可以個別開出一個細小的分支

當然根據公司或是需求不同,不一定會將分支開的這麼細,不過通常最少都會有 master、hotfix 以及 release 這三個比較大方向的分支

(二)、分支圖

註:分支只是一種概念,是人訂出來的,對於 git 來說就只是一個分支,並沒有所謂建立 hotfix 分之這種事,下方圖片簡單介紹了一下後人歸納出的五種類型的分支,並各自會於什麼時候合併到哪裡

圖片參考位址:https://expressus.io/uploads/beautiful-gitflow-workflow-diagram.png

(三)、分支的操作

  • git branch 確認目前所在分支,終端機會印出所有分支並在目前所在的分支名稱前加上星號

  • git branch <分支名稱> 若在上述的指令後面加上一個分支名稱,則會依照此名稱建立一個分支

    可以看到下圖當中我們利用 git branch demo 建立一個名為 demo 的分支,並利用 git branch 查看所有分支

  • git checkout <分支名稱> 可以利用此指令進行分支的切換

    下途中我們利用 git checkout demo 切換到 demo 這個分支,並利用 git branch 查看所有分支

五、何謂衝突

  • 情境:當今天一份專案同時有超過一個人以上在編輯,難免會有兩個人同時編輯到同一行程是碼或是同個檔案的問題,而如果要將這兩份位於不同分支上的專案進行合併 (merge) 的話,就會造成衝突

  • demo 流程:

  • 實作:

    • 進入一個已經有使用 git 的專案

      圖片當中顯示進入 demo 這個專案,並且該專案有 .git 資料夾以及 demo.txt 這個檔案

    • 利用 git branch demo 建立一個名為 demo 的分支

    • 利用 git checkout demo 切換到 demo 分支上並利用 git branch 確認目前所在分支

    • 在 demo 分支上針對 demo.txt 進行編輯並存檔

    • 進行 commit 提交

    • 利用 git checkout master 切換到 demo 分支上並利用 git branch 確認目前所在分支

    • 在 master 分支上針對 demo.txt 的同樣一行的地方進行ㄅㄧ的地方進行編輯並存檔

    • 進行 commit 提交

    • 在 master 分支上利用 git merge demo 將 demo 分支合併過來,系統會跳出發生衝突提示

    • 在 master 分支上打開 demo.txt 可以看到內容如下

      Git 會將有發生衝突的地方進行標示,HEAD 表示目前所在分支的內容, === 下方為合併過來的內容

    • 整理想保留下來的內容 (解決衝突) 並存檔

    • 進行 commit 提交

  • 說明:在解決衝突的過程當中,若你的專案是有兩個人以上進行編輯,請務必和發生衝突的分支負責人進行討論,看看該怎麼樣將檔案進行合併,才不會誤刪別人的工作內容或是造成系統的錯誤

六、Push 程式碼到雲端

雲端泛指可以使用 git 將程式碼推上網路上的某處進行儲存的地方,目前常用的有 GitHub、GitLab

將程式碼推上雲端的情況大約分為兩種,一為雲端儲存庫為新的,需要手動建立連線,另一個則為專案本身就是從雲端上複製下來的,將利用 GitHub 針對此兩種情況進行說明

(一)、全新的 GitHub 儲存庫

  • 情境:假設今天在本地端有一個專案已經有用 git 進行版控了,想要將專案推上在 GitHub 的全新儲存庫時

  • demo 流程:

  • 實作:

    • 使用 terminal 開啟一個已經有使用 git 的專案

    • 複製 GitHub 專案網址

      ex:https://github.com/nickchen1998/test.git

    • 運行指令 git remote add <連線名稱> <專案網址> 進行連線

      連線名稱可以自行命名,通常命名為 origin

    • 運行指令 git remote -v 查看連線是否新增成功

    • 運行指令 git push 進行推送

      初次進行推送會提示需要進行一些設定,按照提示輸入 git push --set-upstream origin master 往後要進行推送只需要使用 git push

      下圖可以看到第一次進行推送時需要按照提示進行輸入

      下圖可以看到按照提示輸入後即可正常進行推送

    • 前往 GitHub 進行查看

(二)、從雲端複製下來的專案

  • 情境:假設今天你從雲端複製一份專案下來,可以直接使用 git remote -v 查看連線,會發現 git 會幫你直接建立好連線,後續有任何更動可以按照 git add . > git commit -m "message" > git push 這三個步驟即可進行推送

(三)、注意事項

git push 指令預設會將所在分支推送到對應連線專案上的同個分支,由於連線數量可以不只一個,且分支通常也不會只有 master,這時候就可以透過更改 git push <連線名稱> <分支名稱> 來進行推送


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
heiyuyu
iT邦新手 5 級 ‧ 2023-04-07 14:15:16

很清楚的教學,真的幫大忙了!!感謝!

我要留言

立即登入留言